#include <iostream>

using std::cout;
using std::endl;

class Singleton
{
public:
    static Singleton & getInstance()
    {
        //静态对象, 位于全局静态区
        static Singleton s;//只在第一次调用getInstance函数时，会进行初始化
                           //后续的调用都是直接使用s，不会再创建新的对象
        return s;//当返回值为引用时，执行return语句时，不会复制
    }
private:
    //将构造函数私有化，不能在类之外直接调用
    //但可以在类内部调用
    Singleton() {   cout << "Singleton()" << endl;  }
    ~Singleton() {   cout << "~Singleton()" << endl;  }

private:
    int _ix;
    int _iy;
};

//static Singleton s1;//error
//static Singleton s2;

int main()
{
    //Singleton s3, s4;//error
    Singleton & ref1 = Singleton::getInstance();
    Singleton & ref2 = Singleton::getInstance();
    cout << "&ref1: " << &ref1 << endl;
    cout << "&ref2: " << &ref2 << endl;

    return 0;
}

